package com.example.MVC.注解分析;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller // 表示这是一个控制器
@RequestMapping("/test")
class RequestMapping注解 {
    //此时请求映射所映射的请求的请求路径为：/test/testRequestMapping
    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        return "success";
    }

    /**
     * value = {"/www","/ww"}  访问路径 可以多个  至少有一个 默认是value
     * 默认任何方式都可以
     * method = RequestMethod.POST
     * method = RequestMethod.GET
     * method = RequestMethod.DELETE
     * method = RequestMethod.PUT
     * 1、对于处理指定请求方式的控制器方法，
     *   SpringMVC中提供了@RequestMapping的派生注解
     *  处理get请求的映射-->@GetMapping
     *  处理post请求的映射-->@PostMapping
     *  处理put请求的映射-->@PutMapping
     *  处理delete请求的映射-->@DeleteMapping
     *  2、常用的请求方式有get，post，put，delete
     *  但是目前浏览器只支持get和post，若在form表单提交时，
     *  为method设置了其他请求方式的字符串（put或delete照默认的请求方式get处理
     *  若要发送put和delete请求，
     *  则需要通过spring提供的过滤器HiddenHttpMethodFilter
     *
     *
     *  params = {"username"}   表示必须有一个传参为username
     *  params = {"!username"}   表示不能有传参为username的
     *  params = {"username=555"}   要求请求映射所匹配的请求必须携带username请求参数且username=555
     *  params = {"username！=555"}   要求请求映射所匹配的请求必须携带username请求参数且username！=555
     *
     * 404: 请求头信息不匹配
     * 405：请求方式不匹配  GET POST DELETE PUT
     * 400：请求参数不匹配
     *
     *
     */
    @RequestMapping(
            //GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
//            method = {RequestMethod.GET},//
//            params = {"username=555"},//表示必须有username这个信息而且值必须是555
            headers = {"Host=localhost:8080"},
            value = "/RequestMappingPost"
    )
    public String hh(){
        System.out.println("5555555555555555555");
        return "login";
    }

    /**
     *
     *  7、SpringMVC支持ant风格的路径
     *
     * ？：表示任意的单个字符  //不能用   /   ？
     * *：表示任意的0个或多个字符
     * **：表示任意的一层或多层目录
     * 注意：在使用 **时，只能使用   / ** /
     * xxx的方式
     *
     * ### 8、SpringMVC支持路径中的占位符（重点）
     *
     * 原始方式：/deleteUser?id=1
     * rest方式：/deleteUser/1
     *
     * 表示传输的数据，在通过@PathVariable注解，将占位符所表示的数据赋值给控制器方法的形参
     */
    @RequestMapping("/566655")
    public String nb字符(){
        System.out.println("5555555555555555555");
        return "login";
    }

}
/**
 * 三、@RequestMapping注解
 *
 * ### 1、@RequestMapping注解的功能
 *
 * 从注解名称上我们可以看到，
 * @RequestMapping 注解的作用就是将请求和处理请求的控制器方法关联起来，建立映射关系。
 *
 * SpringMVC 接收到指定的请求，就会来找到在映射关系中对应的控制器方法来处理这个请求。
 *
 * ### 2、@RequestMapping注解的位置
 *
 * @RequestMapping 标识一个类：设置映射请求的请求路径的初始信息
 *
 * @RequestMapping 标识一个方法：设置映射请求请求路径的具体信息
 */
